# _*_ coding : utf-8 _*_
# @Time : 2023/3/16 0016 17:51
# @Author : 菜鸟王小二
# @File : 22_bs4的BeautifulSoup选择器学习
# @Project : python爬虫

from bs4 import BeautifulSoup

# BeautifulSoup解析本地文件
# 打开一个文件,参数lxml为必需的，使用lxml内核
soup = BeautifulSoup(open('xpath.html','r',encoding='utf-8'),'lxml')

# 通过标签名也可以查找
# print(soup.a)
# 获取标签的属性和属性值，以字典形式返回
# print(soup.a.attrs)

# print(soup.find('a'))

# 使用class时，由于class为关键字，使用class_也可以获取class属性，功能一样
# print(soup.find('li',class_ = 'c2'))

# find_all()返回一个列表
# print(soup.find_all('li'))

# 查询多个标签，必须以列表的形式
# print(soup.find_all(['a','span']))

# 第二个参数limit，限制选择的标签数量,前几个
# print(soup.find_all('li',limit=2))

# select() 推荐使用
# 类选择器
# print(soup.select('.c2'))
# id选择器
# print(soup.select('#l1'))

# print(soup.select('li[id]'))
# print(soup.select('a[title="a1"]'))

# 层级选择器
# 后代选择器,可以选儿子、孙子
# print(soup.select('div li'))
# 子代选择器，只能选儿子
# print(soup.select('div > ul > li'))
# print(soup.select('a,span'))

# obj = soup.select('#d1')[0]
# 如果标签中只有内容，string和get_text()都可以获取标签中的内容,但如果此标签内部还有标签，则sting获取不到
# print(obj.string)
# 但是通过get_text()方法就可以获取数据
# print(obj.get_text())

obj = soup.select('div .inner_a')[0]
# 返回的字典中获取数据
print(obj.attrs.get('title'))
print(obj.get('class'))